using CodeSaude.Domain.Entities;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.ModelConfiguration;

namespace CodeSaude.Infrastructure.Data.EntityConfig
{
    public class PessoaMap : EntityTypeConfiguration<Pessoa>
    {
        public PessoaMap()
        {
            // Primary Key
            this.HasKey(t => t.PessoaId);

            // Properties
            this.Property(t => t.NomePessoa)
                .IsRequired()
                .HasMaxLength(255);

            this.Property(t => t.SexoPessoa)
                .IsFixedLength()
                .HasMaxLength(1);

            this.Property(t => t.NomePaiPessoa)
                .HasMaxLength(255);

            this.Property(t => t.NomeMaePessoa)
                .HasMaxLength(255);

            this.Property(t => t.NaturalidadePessoa)
                .HasMaxLength(255);

            this.Property(t => t.UFNaturalidadePessoa)
                .IsFixedLength()
                .HasMaxLength(2);

            this.Property(t => t.NumeroNaturalizacao)
                .HasMaxLength(20);

            this.Property(t => t.FrequentaEscola)
                .IsFixedLength()
                .HasMaxLength(1);

            this.Property(t => t.Aposentado)
                .IsFixedLength()
                .HasMaxLength(1);

            this.Property(t => t.Profissao)
                .HasMaxLength(255);

            this.Property(t => t.PossuiOcupacao)
                .IsFixedLength()
                .HasMaxLength(1);

            this.Property(t => t.NomeCartorio)
                .HasMaxLength(50);

            this.Property(t => t.LivroCertidao)
                .HasMaxLength(20);

            this.Property(t => t.FolhaCertidao)
                .HasMaxLength(20);

            this.Property(t => t.TermoCertidao)
                .HasMaxLength(20);

            this.Property(t => t.Email)
                .HasMaxLength(40);

            this.Property(t => t.Celular)
                .HasMaxLength(20);

            this.Property(t => t.TelefoneContato)
                .HasMaxLength(20);

            this.Property(t => t.NomeContato)
                .HasMaxLength(70);

            this.Property(t => t.RGPessoa)
                .HasMaxLength(20);

            this.Property(t => t.UfRg)
                .IsFixedLength()
                .HasMaxLength(2);

            this.Property(t => t.CPFPessoa)
                .HasMaxLength(20);

            this.Property(t => t.OcupacaoPessoa)
                .HasMaxLength(255);

            this.Property(t => t.EstadoCivilPessoa)
                .HasMaxLength(60);

            this.Property(t => t.CEPPessoa)
                .HasMaxLength(10);

            this.Property(t => t.RuaPessoa)
                .HasMaxLength(255);

            this.Property(t => t.BairroPessoa)
                .HasMaxLength(255);

            this.Property(t => t.CidadePessoa)
                .HasMaxLength(255);

            this.Property(t => t.NumeroPessoa)
                .HasMaxLength(10);

            this.Property(t => t.ComplementoPessoa)
                .HasMaxLength(60);

            this.Property(t => t.UFPessoa)
                .IsFixedLength()
                .HasMaxLength(2);

            this.Property(t => t.TelefonePessoa)
                .HasMaxLength(20);

            this.Property(t => t.OutroEnderecoPessoa)
                .HasMaxLength(255);

            this.Property(t => t.PontoReferenciaPessoa)
                .HasMaxLength(255);

            this.Property(t => t.CNSPessoa)
                .HasMaxLength(20);

            //this.Property(t => t.Usuario_criacao)
            //    .HasMaxLength(50);

            //this.Property(t => t.Usuario_alteracao)
                //.HasMaxLength(50);

            this.Property(t => t.CodigoPacienteBiosLab)
                .HasMaxLength(20);

            // Table & Column Mappings
            this.ToTable("pessoa");
            this.Property(t => t.PessoaId).HasColumnName("id_pessoa");
            this.Property(t => t.IdProntuario).HasColumnName("prontuario");
            this.Property(t => t.NomePessoa).HasColumnName("nome_pessoa");
            this.Property(t => t.DataNascPessoa).HasColumnName("dt_nasc_pessoa");
            this.Property(t => t.IdRacaCor).HasColumnName("id_raca_cor");
            this.Property(t => t.SexoPessoa).HasColumnName("sexo_pessoa");
            this.Property(t => t.NomePaiPessoa).HasColumnName("nome_pai_pessoa");
            this.Property(t => t.NomeMaePessoa).HasColumnName("nome_mae_pessoa");
            this.Property(t => t.IdNacionalidade).HasColumnName("id_nacionalidade");
            this.Property(t => t.NaturalidadePessoa).HasColumnName("naturalidade_pessoa");
            this.Property(t => t.UFNaturalidadePessoa).HasColumnName("uf_naturalidade_pessoa");
            this.Property(t => t.IdPaisOrigem).HasColumnName("id_pais_origem");
            this.Property(t => t.DataEntrada).HasColumnName("data_entrada");
            this.Property(t => t.DataNaturalizacao).HasColumnName("data_naturalizacao");
            this.Property(t => t.NumeroNaturalizacao).HasColumnName("numero_naturalizacao");
            this.Property(t => t.IdEscolaridade).HasColumnName("id_escolaridade");
            this.Property(t => t.FrequentaEscola).HasColumnName("frequenta_escola");
            this.Property(t => t.Aposentado).HasColumnName("aposentado");
            this.Property(t => t.Profissao).HasColumnName("profissao");
            this.Property(t => t.PossuiOcupacao).HasColumnName("possui_ocupacao");
            this.Property(t => t.IdTipoCertidao).HasColumnName("id_tipo_certidao");
            this.Property(t => t.NomeCartorio).HasColumnName("nome_cartorio");
            this.Property(t => t.LivroCertidao).HasColumnName("livro_certidao");
            this.Property(t => t.FolhaCertidao).HasColumnName("folha_certidao");
            this.Property(t => t.TermoCertidao).HasColumnName("termo_certidao");
            this.Property(t => t.DataEmissaoCertidao).HasColumnName("data_emissao_certidao");
            this.Property(t => t.Email).HasColumnName("email");
            this.Property(t => t.Celular).HasColumnName("celular");
            this.Property(t => t.TelefoneContato).HasColumnName("telefone_contato");
            this.Property(t => t.NomeContato).HasColumnName("nome_contato");
            this.Property(t => t.IdParentescoContato).HasColumnName("id_parentesco_contato");
            this.Property(t => t.IdEtnia).HasColumnName("id_etnia");
            this.Property(t => t.RGPessoa).HasColumnName("rg_pessoa");
            this.Property(t => t.IdOrgaoEmissor).HasColumnName("id_orgao_emissor");
            this.Property(t => t.UfRg).HasColumnName("uf_rg");
            this.Property(t => t.DataEmissaoRG).HasColumnName("data_emissao_rg");
            this.Property(t => t.CPFPessoa).HasColumnName("cpf_pessoa");
            this.Property(t => t.OcupacaoPessoa).HasColumnName("ocupacao_pessoa");
            this.Property(t => t.EstadoCivilPessoa).HasColumnName("est_civil_pessoa");
            this.Property(t => t.CEPPessoa).HasColumnName("cep_pessoa");
            this.Property(t => t.IdTipoLogradouro).HasColumnName("id_tipo_logradouro");
            this.Property(t => t.RuaPessoa).HasColumnName("rua_pessoa");
            this.Property(t => t.BairroPessoa).HasColumnName("bairro_pessoa");
            this.Property(t => t.CidadePessoa).HasColumnName("cidade_pessoa");
            this.Property(t => t.NumeroPessoa).HasColumnName("numero_pessoa");
            this.Property(t => t.ComplementoPessoa).HasColumnName("complemento_pessoa");
            this.Property(t => t.UFPessoa).HasColumnName("uf_pessoa");
            this.Property(t => t.TelefonePessoa).HasColumnName("telefone_pessoa");
            this.Property(t => t.OutroEnderecoPessoa).HasColumnName("outro_endereco_pessoa");
            this.Property(t => t.PontoReferenciaPessoa).HasColumnName("ponto_ref_pessoa");
            this.Property(t => t.CNSPessoa).HasColumnName("cns_pessoa");
            this.Property(t => t.FlagSyncSGE).HasColumnName("flagSyncSGE");
            this.Property(t => t.IdSituacao).HasColumnName("id_situacao");
            //this.Property(t => t.data_criacao).HasColumnName("data_criacao");
            //this.Property(t => t.Usuario_criacao).HasColumnName("Usuario_criacao");
            //this.Property(t => t.data_alteracao).HasColumnName("data_alteracao");
            //this.Property(t => t.Usuario_alteracao).HasColumnName("Usuario_alteracao");
            this.Property(t => t.CodigoPacienteBiosLab).HasColumnName("codigo_paciente_bioslab");
        }
    }
}
